package org.ms.nerver.governor.fault;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.ms.nerver.governor.common.ExtendProp;
import org.ms.nerver.governor.fault.note.TriggerWatch;

/**
 * 容错机制(Fault Tolerance)
 * @author lry
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Fault {

	/**
	 * 分组KEY
	 * @return
	 */
    String groupKey() default "";

    /**
     * 命令KEY
     * @return
     */
    String cmdKey() default "";
	
	/**
	 * 容错方法名称
	 * @return
	 */
	String fallbackMethod() default "";
	
	/**
	 * 容错方法失败备用容错,即二级容错
	 * @return
	 */
	String fallback2Method() default "";
	
	/**
	 * 扩展点命令资源
	 * @return
	 */
	ExtendProp[] extendProp() default {};
	
	/**
	 * 指定需要忽略的异常类
	 * @return
	 */
    Class<? extends Throwable>[] ignoreExceps() default {};
    
    /**
     * 指定观察到的模式
     * @return
     */
    TriggerWatch triggerWatch() default TriggerWatch.EAGER;
	
}
